Biblioshop - MySQL DDL
We schrijven de SQL om de tabellen te maken op basis van Biblioshop - logisch model. De SQL om tabellen te maken behoort bij de DDL of Data Definition Language.
Probleem
We maken de database en de tabellen niet aan met behulp van een visuele designer maar met behulp van SQL scripts.
Oplossing
- Globals instellen
Je stelt die alleen in op je lokale MySQL Server, niet op de remote SQL server.
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET GLOBAL sql_mode = 'ANSI';
- Database maken
Je creëert een database alleen op je lokale MySQL Server, niet op de remote SQL server. Gebruik je de naam van je eigen database.
-- If database does not exist, create the database CREATE DATABASE IF NOT EXISTS docent1;
- Database activeren
Gebruik de naam van je eigen database.
USE docent1;
- Foreign Key constraints opheffen
-- With the MySQL FOREIGN_KEY_CHECKS variable, -- you don't have to worry about the order of your -- DROP and CREATE TABLE statements at all, and you can -- write them in any order you like, even the exact opposite. SET FOREIGN_KEY_CHECKS = 0;
- DDL voor de tabel Customer
Over de tabel Customer valt niet veel te zeggen.- De kolom
Id
is de primary key. MetAUTO_INCREMENT
wordt de waarde in de kolomId
telkens met 1 vermeerderd. - En we voegen er de constraint
NOT NULL
aan toe om de vermijden dat die leeg zou zijn. - Let erop hoe we een
UNIQUE
constraint toevoegen voor de kolomEmail
. In het logisch model staat immers opgegeven dat die waarde uniek moet zijn. D.w.z. dat er in de tabel geen dubbels mogen zitten. - Vooraleer de tabel te creëren gaan we na of de tabel al bestaat. Als de tabel bestaat wordt die eerst verwijderd.
- Code:
-- modernways.be -- created by an orm apart -- Entreprise de modes et de manières modernes -- MySql: CREATE TABLE Customer -- Created on Tuesday 24th of November 2020 04:38:06 PM -- DROP TABLE IF EXISTS `Customer`; CREATE TABLE `Customer` ( `Email` NVARCHAR (255) NOT NULL, `FirstName` NVARCHAR (255) NOT NULL, `LastName` NVARCHAR (255) NOT NULL, `Address` NVARCHAR (255) NOT NULL, `City` NVARCHAR (255) NOT NULL, `PostalCode` VARCHAR (20) NOT NULL, `Country` NVARCHAR (50) NULL, `Phone` VARCHAR (40) NULL, `Id` INT NOT NULL AUTO_INCREMENT, CONSTRAINT PRIMARY KEY(`Id`), CONSTRAINT uc_Customer_Email UNIQUE (Email));
- DDL voor de tabel Order
Dit is een interessantere tabel.- Zoals je hieronder ziet zijn er drie vreemde sleutels. Eén die verwijst naar de
Customer
, één naar deShippingMethod
en de derde naarOrderStatus
. - We voegen ook de
NOT NULL
constraints toe die in het logisch model zijn opgeslagen. -
Code: -- modernways.be -- created by an orm apart -- Entreprise de modes et de manières modernes -- MySql: CREATE TABLE Order -- Created on Tuesday 24th of November 2020 04:38:06 PM -- DROP TABLE IF EXISTS `Order`; CREATE TABLE `Order` ( `OrderDate` DATETIME NOT NULL, `ShippingDate` DATETIME NOT NULL, `Comment` NVARCHAR (512) NULL, `Id` INT NOT NULL AUTO_INCREMENT, CONSTRAINT PRIMARY KEY(`Id`), `CustomerId` INT NOT NULL, `ShippingMethodId` INT NOT NULL, `StatusId` INT NOT NULL, CONSTRAINT fk_OrderCustomerId FOREIGN KEY (`CustomerId`) REFERENCES `Customer` (`Id`), CONSTRAINT fk_OrderShippingMethodId FOREIGN KEY (`ShippingMethodId`) REFERENCES `ShippingMethod` (`Id`), CONSTRAINT fk_OrderStatusId FOREIGN KEY (`StatusId`) REFERENCES `OrderStatus` (`Id`));
- Zoals je hieronder ziet zijn er drie vreemde sleutels. Eén die verwijst naar de
- De kolom
2020-11-24 16:47:33